/*********************************************************************************************************
* 模块名称：I2C.c
* 摘    要：I2C模块
* 当前版本：1.0.0
* 作    者：jadewo
* 完成日期：2025年05月22日
* 内    容：I2C服务
* 注    意：
**********************************************************************************************************
* 取代版本：
* 作    者：
* 完成日期：
* 修改内容：
* 修改文件：
*********************************************************************************************************/

/*********************************************************************************************************
*                                              包含头文件
*********************************************************************************************************/
#include "I2C.h"
#include "gd32f30x_conf.h"

/*********************************************************************************************************
*                                              宏定义
*********************************************************************************************************/
#define I2C0_SLAVE_ADDRESS7      0x78

/*********************************************************************************************************
*                                              枚举结构体
*********************************************************************************************************/

/*********************************************************************************************************
*                                              内部变量定义
*********************************************************************************************************/

/*********************************************************************************************************
*                                              内部函数声明
*********************************************************************************************************/
static void ConfigRCU(void);    //初始化RCU
static void ConfigGPIO(void);   //初始化GPIO
static void ConfigI2C(void);    //初始化I2C
/*********************************************************************************************************
*                                              内部函数实现
*********************************************************************************************************/
/*********************************************************************************************************
* 函数名称：ConfigRCU
* 函数功能：配置RCU
* 输入参数：void
* 输出参数：void
* 返 回 值：void
* 创建日期：2025年05月22日
* 注    意：
*********************************************************************************************************/
static void ConfigRCU(void)
{
    /* enable GPIOB clock */
    rcu_periph_clock_enable(RCU_GPIOB);
    /* enable I2C0 clock */
    rcu_periph_clock_enable(RCU_I2C0);
}

/*********************************************************************************************************
* 函数名称：ConfigGPIO
* 函数功能：配置GPIO
* 输入参数：void
* 输出参数：void
* 返 回 值：void
* 创建日期：2025年05月22日
* 注    意：
*********************************************************************************************************/
static void ConfigGPIO(void)
{
    /* connect PB6 to I2C0_SCL */
    /* connect PB7 to I2C0_SDA */
    
    gpio_init(GPIOB, GPIO_MODE_AF_OD, GPIO_OSPEED_50MHZ, GPIO_PIN_6 | GPIO_PIN_7);

    
}

/*********************************************************************************************************
* 函数名称：ConfigI2C
* 函数功能：配置I2C
* 输入参数：void
* 输出参数：void
* 返 回 值：void
* 创建日期：2025年05月22日
* 注    意：
*********************************************************************************************************/
static void ConfigI2C(void)
{
    i2c_deinit(I2C0);                               //复位I2C0
    /* configure I2C0 clock */
    i2c_clock_config(I2C0, 400000, I2C_DTCY_2);     //设置波特率
    /* configure I2C0 address */
    i2c_mode_addr_config(I2C0, I2C_I2CMODE_ENABLE, I2C_ADDFORMAT_7BITS, I2C0_SLAVE_ADDRESS7);   //设置模式、传输数据长度、主机地址
    /* enable I2C0 */
    i2c_enable(I2C0);                               //使能外设
    /* enable acknowledge */
    i2c_ack_config(I2C0, I2C_ACK_ENABLE);       
}

/*********************************************************************************************************
*                                              API函数实现
*********************************************************************************************************/
/*********************************************************************************************************
* 函数名称：InitI2C
* 函数功能：初始化I2C
* 输入参数：void
* 输出参数：void
* 返 回 值：void
* 创建日期：2025年05月22日
* 注    意：
*********************************************************************************************************/
void InitI2C(void)
{    
    ConfigRCU();
    ConfigGPIO();
    ConfigI2C();
}

